﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using GRUPO_4.Dominio;
using System.Configuration;

namespace GRUPO_4.Persistencia
{
    public class PuestoDao : IPuestoDAO
    {
     
        private SqlConnection conexion;

        public PuestoDao()
        {
            conexion = new SqlConnection();
            conexion.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        }
        public Puesto CrearPuesto(Puesto puesto)
        {

            String sentencia = "INSERT INTO Puestos VALUES (@CodPuesto,@descripcionPuesto)";
            conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter CodPuesto = new SqlParameter("@CodPuesto", System.Data.SqlDbType.Int);
                CodPuesto.Value = puesto.codPuesto;
                comando.Parameters.Add(CodPuesto);

                SqlParameter descripcionPuesto = new SqlParameter("@descripcionPuesto", System.Data.SqlDbType.NVarChar);
                descripcionPuesto.Value = puesto.descripcionPuesto;
                comando.Parameters.Add(descripcionPuesto);

                comando.ExecuteNonQuery();
            }
            conexion.Close();
            return this.ObtenerPuesto(puesto.codPuesto);
        }

        public Puesto ModificarPuesto(Puesto puesto)
        {
            conexion.Open();
            String sqlvalores1 = "descripcionPuesto='" + puesto.descripcionPuesto + "'" +
                                 " WHERE CodPuesto=" + puesto.codPuesto;

            String sentencia = "UPDATE Puestos SET " + sqlvalores1;
            SqlCommand comando = new SqlCommand(sentencia, conexion);

            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerPuesto(puesto.codPuesto); //TODO: Queda pendiente de devolver objeto creado
        }

        public Puesto ObtenerPuesto(int codigo)
        {

            String sentencia = "SELECT * FROM Puestos WHERE CodPuesto=@CodPuesto";
            conexion.Open();
            Puesto puesto = null;

            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter buscador = new SqlParameter("@CodPuesto", System.Data.SqlDbType.Int);
                buscador.Value = codigo;
                comando.Parameters.Add(buscador);
                SqlDataReader resultado = comando.ExecuteReader();
                if (resultado.HasRows)
                {
                    resultado.Read();
                    puesto = new Puesto();
                    puesto.codPuesto = (int)resultado["CodPuesto"];
                    puesto.descripcionPuesto = (String)resultado["descripcionPuesto"];

                }
            }

            conexion.Close();
            return puesto;
        }

        public void eliminarPuesto(int codigo)
        {
            String sentencia = "DELETE FROM Puestos WHERE CodPuesto=@CodPuesto";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter borrador = new SqlParameter("@CodPuesto", System.Data.SqlDbType.Int);
                borrador.Value = codigo;
                comando.Parameters.Add(borrador);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }



        public ICollection<Puesto> ListarTodos()
            
        {

            conexion.Open();

            String sentencia = "SELECT * FROM Puestos";

            SqlCommand comando = new SqlCommand(sentencia, conexion);

            SqlDataReader resultado = comando.ExecuteReader();

            //Se declara la coleccion de Puesto --- Coleccion es un contenedor de objetos de tipo Puesto

            ICollection<Puesto> objColeccionPuesto = new List<Puesto>();

            while (resultado.Read())
            {

               Puesto unPuesto = new Puesto();

               unPuesto.codPuesto = (Int32)resultado["codPuesto"];

               unPuesto.descripcionPuesto = (String)resultado["descripcionPuesto"];

                objColeccionPuesto.Add(unPuesto);
                }
            conexion.Close();
            return objColeccionPuesto;

        }

          

        public ICollection<Puesto> ListarPorNombreSimilar(string descripcion)
        {
            throw new NotImplementedException();
        }

        public Puesto Crear(Puesto entidad)
        {
            return this.CrearPuesto(entidad);
        }

        public Puesto Obtener(int id)
        {
            return this.ObtenerPuesto(id);
        }

        public Puesto Modificar(Puesto entidad)
        {
            return this.ModificarPuesto(entidad);
        }

        public void Eliminar(Puesto entidad)
        {
            this.eliminarPuesto(entidad.codPuesto);
        }
    }
}